home *** CD-ROM | disk | FTP | other *** search
/ Danny Amor's Online Library / Danny Amor's Online Library - Volume 1.iso / html / faqs / alt / os.multics / faq_multics_features < prev    next >
Encoding:
Text File  |  1994-12-07  |  21.7 KB  |  442 lines

  1. Newsgroups: alt.os.multics
  2. Path: bloom-beacon.mit.edu!panix!zip.eecs.umich.edu!newsxfer.itd.umich.edu!europa.eng.gtefsd.com!howland.reston.ans.net!news.cac.psu.edu!news.pop.psu.edu!hudson.lm.com!netline-fddi.jpl.nasa.gov!wiretap.spies.com!times.aux.apple.com!mumbo.apple.com!gallant.apple.com!apple.com!taligent!tvv.taligent.com!user
  3. From: tom_van_vleck@taligent.com (Tom Van Vleck)
  4. Subject: FAQ Multics Features
  5. Message-ID: <tom_van_vleck-0112941031230001@tvv.taligent.com>
  6. Sender: usenet@taligent.com (More Bytes Than You Can Read)
  7. Organization: Multicians
  8. Date: Thu, 1 Dec 1994 19:31:23 GMT
  9. Lines: 431
  10.  
  11. Summary: General information about Multics features. <plaintext>
  12. Expires: 1 Jan 1995
  13.  
  14. archive-name: multics/features
  15.  
  16. 06/01/94 THVV split out features from general
  17. 06/01/94 THVV added LISP info from BSG. (Wish everything were described
  18.               to this level of detail.  Help me out, folks.)
  19.  
  20. Please post corrections/additions or mail them to 
  21. <tom_van_vleck@taligent.com
  22. ====================================================================
  23. 1.      Multics Software Features
  24. 1.1.      Virtual memory management
  25. Paul Green posted a description in May 93.
  26.  
  27. 1.2.      Dynamic linking
  28. Multics needed no loader.  Write a procedure, say joe, & compile: 
  29. suppose the resulting binary refers to an external subroutine called 
  30. fred.  You can run joe by just typing its name.  The command processor 
  31. launches it by just finding the segment joe, adding it to the user 
  32. process's address space, and jumping to the entrypoint.  Fred may not 
  33. even exist, and if joe never calls it, no problem.  If joe does call 
  34. fred, a linkage fault occurs.  The system linkage fault handler searches 
  35. for a file named fred, adds it to the address space & fixes the linkage 
  36. to go fast next time, and continues.  If fred's not found, the user gets 
  37. a fault message, and can quickly write a fred, compile it, and then 
  38. continue execution of joe, which will then find fred.  <<more: binder, 
  39. run units, use command>>
  40.  
  41. 1.3.      Scheduler
  42. The Multics scheduler began as a Greenberger-Corbato exponential 
  43. scheduler similar to that in CTSS.  About 1976 it was replaced by a 
  44. virtual deadline scheduler which supported specification of desired 
  45. realtime response (N milliseconds in M) for system processes such as 
  46. printer daemons, and supported "work classes" that could be guaranteed 
  47. percentages of the system's CPU resource under load (e.g., "Give 
  48. Engineering 17% and Humanities 12%").  Load control groups defined by 
  49. the answering service were mapped into work classes via the Master Group 
  50. Table (MGT).
  51.  
  52. 1.4. Instrumentation
  53. There were many metering commands, such as file_system_meters, 
  54. traffic_control_meters, pre_page_meters, device_meters, tty_meters, 
  55. page_trace, trace, meter_gate, meter_signal, alarm_clock_meters, 
  56. vtoc_buffer_meters, total_time_meters, the ready message, and the script 
  57. driver.  The microsecond hardware clock made it easy to instrument code.  
  58. Almost all subsystems had metering built in, running all the time; the 
  59. commands just displayed the internal counters.  The standard procedure 
  60. for installing a new system release included running a 60-minute 
  61. performance benchmark.
  62.  
  63. 1.5.      Accounting & administration
  64. Multics provided a set of applications for printing monthly usage 
  65. reports and bills for timesharing users.  CPU usage was recorded to the 
  66. microsecond; memory residence to the page-millisecond (this unit was 
  67. called the "Frankston" after its initial implementer), disk storage 
  68. residence to the page-second.  Individual users had quotas and dollar 
  69. limits, administered by group administrators and project administrators.
  70.  
  71. 1.6.      Languages
  72. 1.6.1.  EPL - Early PL/I.  Bell Labs contracted with Digitek in 1967 or 
  73. so for a PL/I compiler, but they didn't deliver.  A BTL team led by Doug 
  74. McIlroy and Bob Morris created the EPL compiler using McClure's TMG 
  75. compiler-compiler, macro'd over from the CDC 1604 -> 7090 -> 7094 -> 635 
  76. -> 645.  It was very slow; we joked that one more port would kill it.
  77.  
  78. 1.6.2.  EPLBSA - EPL Bootstrap Assembler.  A GE team under Tom Kinhan 
  79. was working on a very fancy full-macro assembler, but we needed an 
  80. interim assembler in a hurry, so Bill Poduska wrote EPLBSA.  EPL 
  81. compiled into EPLBSA and was then assembled.
  82.  
  83. 1.6.3.  PL/I - there were several versions.  The "version 2" compiler 
  84. was robust, efficient, and a clean implementation of the language.  
  85. Almost all of the operating system was written in PL/I.  Compiled 
  86. directly to binary.  Language defined by IBM.  Few other languages with 
  87. pointers available at the time we were choosing a language.  (CTSS used 
  88. MAD for some complex supervisor routines, like the scheduler, and AED-0 
  89. for one routine.) History: EPL, v1pl1, v2pl1.  Language features.  ANSI.  
  90. Use of Multics architecture: stack, segmentation.  Special Multics 
  91. extensions to PL/I language: ptr, baseptr, stac.  <<more, see RAF paper 
  92. on PL/I, Corby's PL/I tool paper>>
  93.  
  94. 1.6.4.  ALM - Assembly Language for Multics.  A clean, spare assembler.  
  95. Used for programs that needed ultimate efficiency or that issued 
  96. privileged instructions.
  97.  
  98. 1.6.5.  COBOL - Done by a group at Honeywell Billerica.  Used the PL/I 
  99. code generator as its back end.
  100.  
  101. 1.6.6.  FORTRAN - Two versions of this also.  First version was done in 
  102. POPS by GE; a later version was done at CISL by David Levin and others.
  103.  
  104. 1.6.7.  BCPL - Dennis Ritchie and Rudd Canaday ported CTSS BCPL to 
  105. Multics.  Ken Thompson wrote a version of QED in BCPL, and Joe Ossanna 
  106. wrote Multics runoff in BCPL.
  107.  
  108. 1.6.8.  APL - Max Smith wrote a fairly complete implementation of APL.  
  109. It even included the I-beam command that translated text to a function.
  110.  
  111. 1.6.9.  BASIC - The first BASIC we had was true DTSS BASIC running under 
  112. emulation.  Then there was the FAST subsystem, which simulated most of 
  113. the editing features of DTSS as well.  Barry Wolman wrote a BASIC 
  114. compiler which produced native Multics object segments; although quite 
  115. powerful, it didn't get wide usage.
  116.  
  117. 1.6.10.  MACLISP - Multics LISP was one of the first LISP 
  118. implementations on virtual memory.  Multics Version I Lisp was entirely 
  119. in PL/I (including its compiler, which is extremely unusual) by David 
  120. Reed, then an undergraduate at MIT, and was part of the Standard Service 
  121. System libraries.  It was not compatible with any other well-known Lisp.  
  122. There was no Multics software written in it, and it never achieved a 
  123. following or user community.
  124.  
  125. Version II Lisp was known as "Multics MacLisp" (From "Project MAC",
  126. see above.)  The need for it arose from the MIT Mathlab group's (part
  127. of project MAC, later Laboratory for Computer Science) "Macsyma"
  128. program, which was written in Lisp, hitting against the address space
  129. constraints of the PDP-10 systems on which it was developed.  The
  130. large virtual memory of Multics seemed to indicate the latter as a
  131. logical migration platform, so Multics MacLisp was developed to
  132. support Macsyma.
  133.  
  134. Multics MacLisp was designed to be compatible with the large, mature,
  135. and heavily used "MACLISP" dialect in use on the PDP-10's throughout
  136. the AI Lab and MAC, and implemented between 1970 and 1973. Reed, then
  137. an undergraduate at MIT in the Multics group, started the project by
  138. modifying Version I Lisp, writing largely in PL/I.  Ultimately,
  139. several of the most performance-critical sections, most notably the
  140. evaluator, were rewritten in a tour-de-force of ALM (Multics Assembler)
  141. by Dave Moon.  Almost all of the implementation was done by Daves Moon
  142. and Reed and Alex Sunguroff; Moon was working in the MIT Undergraduate
  143. Research Opportunities program; Sunguroff, who worked on the I/O
  144. system, was a paid employee.  Daniel Bricklin, later of VisiCalc fame,
  145. worked on the BIGNUM (arbitrary-precision integer arithmetic) package.
  146.  
  147. The Multics MacLisp Compiler, initially designed and written by Reed
  148. alone, was a full-scale Lisp Compiler producing standard Multics
  149. object segments (which nonetheless had to be run from within the Lisp
  150. subsystem).  Its two phases, semantics and code generation, both
  151. written in Lisp, were derived in conception and strategy from
  152. COMPLR/NCOMPLR, the renonwned and powerful compiler on the PDP-10.
  153. While the code generator was written from scratch, the semantics
  154. phase was ported and adapted from PDP-10 MacLisp.  Reed's code
  155. generator employed a subset NCOMPLR's powerful data-flow techniques.
  156. [An unpublished but widely distributed 1978 paper on these
  157. techniques by Bernard Greenberg is still available from him
  158. (bsg@world.std.com) in ASCII or paper.]  A "LAP" (intrinsic Lisp
  159. assembler program) was written a couple of years later by Moon.
  160.  
  161. Although Macsyma was ported to Multics, it was not a further impetus
  162. for much Multics Lisp development thereafter.  The cause of Multics
  163. Lisp was taken up by Bernard Greenberg, who had just come to
  164. Honeywell (1974) after having been attracted to Lisp while sharing an
  165. office with Moon at MIT.  Greenberg, who was involved with the
  166. development and continuation of the Multics Supervisor, implemented a
  167. Multics post-mortem crash-analysis program, ifd (interpret_fdump) in
  168. Multics Lisp, which in subsequent years achieved wide distribution
  169. and following in the Multics Community.  While the "official
  170. language" status of PL/I actively and openly discouraged
  171. experimentation with other languages, the interactive, extensible
  172. nature of ifd did much to attract attention to Lisp in the Multics
  173. development and site support communities.
  174.  
  175. From that time until his departure from Honeywell in 1980, Greenberg
  176. took over maintenance of Multics Lisp, adding features as he needed.
  177. Moon still contributed major features on occasion.
  178.  
  179. Largely as a consequence of the ifd experience, Greenberg chose
  180. Multics Lisp as the implementation and extension vehicles for Multics
  181. Emacs (1978), which drew attention to Lisp from all over the Multics
  182. community and to Multics from all over the Lisp community.  Multics
  183. Emacs elevated Multics MacLisp to criticality in a highly visible and
  184. significant Multics offering.  Multics Emacs' (see separate section)
  185. highly successful use of Lisp as (inter alia) an extension language
  186. inspired the use of Lisp as such by later generations of Emacs (e.g.,
  187. GNU).
  188.  
  189. Multics MacLisp featured exploitation of the huge Multics address
  190. space, a copying linearizing garbage-collector, two-word "ITS"
  191. (indirect-to-segment) pointers with nine-bit type fields, fullword,
  192. immediate integers and floats (hence, no need for "number space" and
  193. its concomitant inefficiencies), pure, shareable compiled code (as in
  194. all of Multics), and two stacks besides the regular Multics stack
  195. (GC-marked and non-GC marked).  Because of the large pointers,
  196. immediate numbers, and the resulting lack of need for "special
  197. purpose pages", Multics MacLisp was to a large degree free of the
  198. curse of arcane numeric declarations and fragile number-flow tracing
  199. that plagued the PDP-10 implementation.  System symbols were
  200. lower-case and reading was case-sensitive, consistent with the rest
  201. of Multics but few Lisps.
  202.  
  203. A powerful, efficient call-out-to-PL/I feature (defpl1) in the
  204. compiler (but not the interpreter) was among the novelties of the
  205. implementation.  (PL/I programs could not call arbitrary Lisp
  206. routines, although the support of PL/I->Lisp callbacks was provided
  207. for the Emacs interrupt system).  defpl1 could actually receive and
  208. create arbitrary-length strings (returns char (*)) from PL/I, in a way
  209. far more natural than PL/I's own.
  210.  
  211. The Lisp libraries (written in Lisp) featured optional trace and
  212. prettyprint packages and the like, largely taken verbatim from the
  213. PDP-10.  Carl Hoffman, Glenn Burke, and Alan Bawden upgraded these
  214. libraries in 1979 and 1980 to incorporate a large number of language
  215. enhancements (backquote, defstruct, etc.) that had been accepted as
  216. near-standard in the AI community, and were on their way to becoming
  217. part of Common Lisp.
  218.  
  219. Multics MacLisp was paid for and owned by MIT. It was part of the
  220. "author maintained" library at MIT.  When it became necessary to
  221. distribute it as part of Emacs, which was a Honeywell product, one of
  222. the first parts of Multics to be sold as a separate product,
  223. incidentally, an deal was struck permitting Honeywell to distribute
  224. it. As the close relation of Lisp and Multics Emacs tied the
  225. maintenance of the two together, Greenberg was succeeded as the
  226. maintainer of both, upon his departure to Symbolics in 1980, by
  227. Richard Soley and then Barry Margolin.
  228.  
  229. [Written by Bernard Greenberg, with contributions from Daves Moon and
  230. Reed and Carl Hoffman.]
  231.  
  232. 1.6.11.  Macsyma - Dave Moon ported Macsyma to Multics in 1974.  Carl 
  233. Hoffman, Alan Bawden, and Glenn Burke updated it around 1980.
  234.  
  235. 1.6.12.  ALGOL 68 - Done by HIS UK.
  236.  
  237. 1.6.13.  Pascal - Oakland used a Pascal compiler from Grenoble 
  238. University.  (Info from Thomas Hacker)
  239.  
  240. 1.6.14.  C - In the late 80s a C compiler was written for Multics.  John 
  241. Wilson worked on porting TeX to Multics using the new Multics C.  (info 
  242. from Stan Zanarotti) <<need more info.  who worked on this, was it a 
  243. product?>>
  244.  
  245. 1.6.15.  Minor languages, e.g. cv_pmf, built with parse_file_
  246.  
  247. 1.7.      Command language
  248. Paul Green posted a fine description of the Multics command 
  249. language in April 93.
  250.  
  251. 1.7.1.      emacs
  252. <<more, BSG & others posted remarks 5/29/93>>
  253.  
  254. 1.8.      User programming environment
  255. 1.8.1.      Subroutine library
  256. <<more>>
  257.  
  258. 1.8.2.      Structure of a process
  259. <<more>>
  260.  
  261. 1.9.      Graphics
  262. <<more: ARDS/Tektronix graphics, MGS, what were firsts>>
  263.  
  264. 2.      Multics Hardware Features
  265. 2.1.      GE-635 and simulators
  266. The Multics machine was a descendant of the GE-635, which was very like 
  267. the IBM 7094.  36-bit word, accumulator, quotient register, index 
  268. registers.  The 635 had more indirect address modes and had 8 XRs 
  269. instead of the 7094's 7.  While the 645 hardware was being designed and 
  270. built, we ran Multics on the 645 simulator, running on the 635.  Project 
  271. MAC had a 635 in the same machine room as the 7094 that CTSS ran on, and 
  272. programmers generated GEIN tapes using the CTSS MRGEDT command, which 
  273. called a special supervisor trap to write a tape in 635 format.  
  274. Operations input the job to the 635 running GECOS III, and ran simulator 
  275. jobs, which usually ended with the simulator detecting a trap and taking 
  276. a dump of virtual core.  The dump was put on an output tape and input to 
  277. CTSS via the disk editor; the programmer then debugged using the 
  278. interactive GEBUG debugger on CTSS.  EPL compilations were done on CTSS 
  279. at first, and then moved to the 635.
  280.  
  281. 2.2.      GE-645 (January 1967)
  282. 2.2.1.      System block diagram
  283. <<more>>
  284.  
  285. 2.2.2.      Processor
  286. Cycle time was 1-2 usec for most instructions.
  287. <<more: appending unit, base registers, dseg, page tables>>
  288.  
  289. 2.2.3.      Memory
  290. The GE-645 used 1us cycle memory and had 256KW/box.  Important to note 
  291. that the memory controllers (passive devices) were the center of the 
  292. system.  Memory controllers received requests from active devices like 
  293. CPUs, and had complicated arbitration and priority.  The memory 
  294. controllers also supported a few read-alter-rewrite operations, crucial 
  295. for synchronization.
  296.  
  297. 2.2.4.      Firehose drum
  298. The drum was used on some kind of atomic subs.  It had a capacity of 4 
  299. Million 36-bit words, and could move 1024 words (one page) in 4ms with a 
  300. 16ms average latency.  <<more>>
  301.  
  302. 2.2.5.      GIOC
  303. General I/O Controller.  An active device that had its own access to 
  304. memroy.  Had subchannels for disk, tape, terminals.  <<more>>
  305.  
  306. 2.2.6.      Disk subsystems
  307. Initial MIT configuration had 136MB of disk.
  308. <<more: Milking the DS-10s>>
  309.  
  310. 2.2.7.      Calendar clock
  311. The 645 clock was a huge box, 8 foot refrigerator size, containing a 
  312. clock accurate to a microsecond.  It hooked into the system as a 
  313. "passive device," meaning that it looked like a bank of memory.  Memory 
  314. reads from a port with a clock on it returned the time in microseconds 
  315. since 0000 GMT Jan 1, 1901.  (52-bit register) The clock guaranteed that 
  316. no two readings were the same.  It had a real-time alarm register also.  
  317. Inside there was a crystal in an oven, all kinds of ancient electronics.  
  318. The clock diagnostics were very primitive: once we ran them when the 
  319. clock was disconnected, and it passed! "No clock on this port, try to 
  320. read it, shouldn't get any answer, check." Later hardware versions did 
  321. the clock differently, put it inside the memory controller.
  322.  
  323. The CPUs each had an interval timer, a memory cycle counter that could 
  324. be used for scheduling and CPU accounting.
  325.  
  326. 2.2.8.      Grochow XRAY display
  327. On the 645 we had a special GIOC adapter which looped sending requested 
  328. memory locations to a PDP-8/338 over a 2400 baud phone line.  Jerry 
  329. Grochow wrote a thesis about monitoring Multics operation from this 
  330. display.
  331.  
  332. 2.2.9.      Peripherals
  333. tapes, card reader, punch, CRAM unit. <<more>>
  334.  
  335. 2.1.10.     Terminals
  336. TTY37, IBM 1050, IBM 2741 over phone lines. 
  337. ARDS over 202c6 dataphone: 1200/110 baud. <<more>>
  338.  
  339. 2.3.      Honeywell 6180 (11/72)
  340. 2.3.1.      Processor and memory
  341. - Max of 2^15 segments (previously 2^18)
  342. - Max segment size of 2^18 36-bit words (previously 2^16)
  343. - PR pointer registers new (replace ABR pairs)
  344. - "Segment Descriptor" and "Page Table Word" differ,
  345.   as does virtual to physical translation details
  346. - 8 hardware supported rings (previously 64 software rings)
  347. - inward ring calls by hardware (new CALL instruction)
  348. - extended instructions (EIS) new, 9,6 & 4 bit byte & 1 bit ops
  349.   These were multi-byte character string and decimal operations
  350.   (we used to joke that it was as if a 7094 had swallowed a 1401)
  351. - 2K cache in CPU for non-write-shared instructions & data
  352. (info from Richard Wendland & Olin SIbert)
  353. <<more, there were clock changes too>>
  354.  
  355. 2.3.2.      Bulk store
  356. <<more: big slow core bank, replaced drum>>
  357.  
  358. 2.3.3.      DN-355
  359. <<more: replaced GIOC terminal channels with a more standard Honeywell 
  360. datacomm product, connected thru the IOM.  After a while migrated to use 
  361. standard DN-355 software (NPS?) as well.>>
  362.  
  363. 2.3.4.  IOM <<more: Input-output multiplexer.  Replaced GIOC with standard 
  364. Honeywell I/O channel product.>>
  365.  
  366. 2.3.5.      Disk subsystems
  367. <<more: capacity of a DSU-270 (1970) was 10MB, MIT had 15 of them>>
  368.  
  369. 2.4.      Honeywell Series 60 Level 68
  370. The Series 60, Level 68 was just a repackaging of the 6180.  The 
  371. nomenclature "Level 68/M" is incorrect; "68" implies Multics.  Major 
  372. changes included boxes Dick Douglas (a rather short LISD VP) could see 
  373. over the top of and front panels with LEDs instead of little tiny light 
  374. bulbs.  No software-visible changes in the processor (with perhaps the 
  375. exception of some hardware ID configuration register or such).  There 
  376. were visible changes in memory and I/O stuff, as Multics came to support 
  377. the newer modules developed for GCOS (bigger memory, more I/O channels, 
  378. bigger disks, etc.), but I don't believe those ever coincided with a 
  379. change of marketing designator--they just happened in the normal course 
  380. of events.
  381.  
  382. This line was later called the DPS-68, and the DPS-2, -3, and -4; no 
  383. changes except in marketing designation.
  384.  
  385. There was a "cut down" 68/80, called the 68/60, that had a one-wire 
  386. change to disable the cache...  actually a switch, 'cause the 
  387. diagnostics wouldn't run with the cache off.  This was a rarity, and I 
  388. think only sold to a few universities.  (Information from Olin Sibert)
  389.  
  390. 2.5.      Honeywell DPS-8/M
  391. These were introduced in late 1982 or early 1983, and continued to be 
  392. sold until 1987 or so (fully two years after Multics was canceled for 
  393. the last time!).
  394.  
  395. The DPS8/70M, and its later slowed-down cousins, the DPS8/62M and 
  396. DPS8/52M, were the last of the delivered Multics machines.  These were 
  397. based on the GCOS/CP-6 models of the same hardware (which had no suffix 
  398. for GCOS, or suffix C for CP-6, but were otherwise identical).  The 
  399. hardware change was significant: I think only about one-third of the 
  400. boards were identical, another third to half were modified a little, and 
  401. the remainder (addressing and such) were completely different.
  402.  
  403. The 8/52M and 8/62M just had delays inserted in their clocks this made 
  404. the machine timing less reliable, and it took a LONG time to debug.  The 
  405. 8/70M trailed the GCOS model by about two years, the little ones by even 
  406. more.  Hardly any of the slow ones were sold, since they were *more* 
  407. expensive to manufacture than the 8/70M.
  408.  
  409. There was never a Multics equivalent to the small DPS8 machines 
  410. (DPS8/20, DPS8/44).  A pity, since these were compact and microcoded, 
  411. and actually had enough internal register space and addressing to 
  412. support the Multics memory architecture.  They were bloody expensive to 
  413. build, though, as I recall (like all Honeywell hardware, though, 
  414. curiously, these had been designed by NEC), and the low sale price just 
  415. wasn't attractive enough.
  416.  
  417. The 8/70M came with an 8K (word) cache, later upgraded to 32K (word); 
  418. the latter was definitely optional.  The 8K cache yielded about 1.68 
  419. times the performance of the 6180, the 32K cache about 1.05 times.
  420.  
  421. There were a few software-visible changes, mostly in configuration 
  422. registers and the like, but one significant user-visible change: 
  423. hexadecimal mantissa floating point for increased exponent range.  And, 
  424. of course, there were new (from GCOS) memories, I/O controllers, and 
  425. peripherals.
  426.  
  427. UCC got the first production DPS 8s (one of whose doors, containing the 
  428. massive front panels, fell off during installation, leaving the engineer 
  429. holding the thing so it wouldn't pull the connecting cable out by its 
  430. roots).  As such, it certainly had the 8K cache installed, and may have 
  431. upgraded to 32K later.  (Olin Sibert, Deryk Barker)
  432.  
  433. 2.6.      Honeywell ADP, also ORION, eventually DPS88
  434. This machine was never produced, and I do not believe the Multics 
  435. implementation ever saw complete silicon.  It was to have been a Multics 
  436. version of the GCOS DPS88, and would have been about 6 times faster than 
  437. the DPS8/70.  Software work got quite a ways on this, though; that was 
  438. the last project for which I was responsible at Honeywell.  I believe 
  439. this got canceled for good around 1982.  There is some internal evidence 
  440. (in Multics source) that the ADP Multics was resurrected after its Fall 
  441. 1981 death before being killed again.  (Olin Sibert)
  442.